package com.htdata.iiot.tools;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.alibaba.fastjson.JSONObject;
import com.htdata.iiot.api.pojo.StreamingData;
import com.htdata.iiot.api.pojo.StreamingMetricData;

public class Post implements Runnable {
	List<StreamingData> sList = new ArrayList<StreamingData>();
	String url = null;

	public Post(List<StreamingData> sList, String url2) {
		this.sList = new ArrayList<>(sList);
		this.url = url2;
	}

	/**
	 *      * 爬虫工具类      * @param url 传入连接地址      * @param param  设置网页编码格式     
	 * * @return     
	 */
	String SendPost(String param) {
		// 定义一个字符串用来存储网页内容
		String result = "";
		// 定义一个缓冲字符输入流
		BufferedReader in = null;

		try {
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection conn = realUrl.openConnection();
			// 设置通用的请求属性
			conn.setRequestProperty("accept", "*/*");
			conn.setRequestProperty("connection", "close");
			conn.setRequestProperty("Content-Type", "application/json");
			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
			// 发送POST请求必须设置如下两行
			conn.setDoOutput(true);
			conn.setDoInput(true);
			// 获取URLConnection对象对应的输出流
			PrintWriter out = new PrintWriter(conn.getOutputStream());
			// 发送请求参数
			out.print(param);
			// flush输出流的缓冲
			out.flush();
			// 定义BufferedReader输入流来读取URL的响应
			in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
			String line;
			while ((line = in.readLine()) != null) {
				result += "/n" + line;
			}
			Auto2Rest.adder.increment();
		} catch (Exception e) {
			System.out.println("发送GET请求出现异常！" + e);
			e.printStackTrace();
		}
		// 使用finally来关闭输入流
		finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				// e2.printStackTrace();
			}
		}

		return result;
	}

	long st = System.currentTimeMillis();

	public void run() {
		while (true) {
			st += 1000;
			// 3.生成数据
			for (StreamingData sData : sList) {
				List<StreamingMetricData> data = sData.getData();
				for (StreamingMetricData mData : data) {
					mData.setV(Math.ceil(new Random().nextDouble() * 10000) * 0.01);
					mData.setT(st);
					Auto2Rest.mAdder.increment();
				}
				SendPost(buildResult(sData));
			}
		}
	}

	private static String buildResult(StreamingData sData) {
		return JSONObject.toJSONString(sData).toString();
	}
}
